﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL.Entity;

namespace DAL.Persistencia
{
    public class FaturaDAL
    {

        private NewTierraEntities Con;

        public FaturaDAL()
        {
            Con = new NewTierraEntities();
        }

        public List<FaturaSupplier> PesquisarTodosPorSupplier(string codFatura, int idSupplier)
        {
            try
            {
                return Con.FaturaSupplier.Where(s => s.Supplier_id == idSupplier && s.Fatura_numero.Contains(codFatura)).ToList();
            }
            catch
            {
                throw;
            }

        }

        public FaturaSupplier PesquisarUmPorSupplier(string codFatura, int idSupplier)
        {
            try
            {
                return Con.FaturaSupplier.Where(s => s.Supplier_id == idSupplier && s.Fatura_numero.Equals(codFatura)).SingleOrDefault();
            }
            catch
            {
                throw;
            }

        }


        public FaturaSupplier PesquisarUmPorId(int id)
        {
            try
            {
                return Con.FaturaSupplier.Where(s => s.Fatura_id == id).SingleOrDefault();
            }
            catch
            {
                throw;
            }

        }


        public List<FaturaSupplier> PesquisarTodosPorSupplier(int idSupplier)
        {
            try
            {
                return Con.FaturaSupplier.Where(s => s.Supplier_id == idSupplier).ToList();
            }
            catch
            {
                throw;
            }

        }

        public void Salvar(FaturaSupplier fs)
        {

            try
            {
                Con.AddToFaturaSupplier(fs);
                Con.SaveChanges();
            }
            catch
            {
                throw;
            }

        }

        public void Alterar(FaturaSupplier novo)
        {

            try
            {
                FaturaSupplier velho = PesquisarUmPorSupplier(novo.Fatura_numero, Convert.ToInt32(novo.Supplier_id));
                velho.CentroCusto_id = novo.CentroCusto_id;
                velho.ClassificacaoContabil_id = novo.ClassificacaoContabil_id;
                velho.Fatura_Cambio = novo.Fatura_Cambio;
                velho.Fatura_Comissoes = novo.Fatura_Comissoes;
                velho.Fatura_Comissoes_Obs = novo.Fatura_Comissoes_Obs;
                velho.Fatura_Deposito = novo.Fatura_Deposito;
                velho.Fatura_Deposito_Obs = novo.Fatura_Deposito_Obs;
                velho.Fatura_Descontos = novo.Fatura_Descontos;
                velho.Fatura_Descontos_Obs = novo.Fatura_Descontos_Obs;
                velho.Fatura_Despesas = novo.Fatura_Despesas;
                velho.Fatura_Despesas_Obs = novo.Fatura_Despesas_Obs;
                velho.Fatura_Emissao = novo.Fatura_Emissao;
                //velho.Fatura_id = novo.Fatura_id;
                velho.Fatura_Impostos = novo.Fatura_Impostos;
                velho.Fatura_Impostos_Obs = novo.Fatura_Impostos_Obs;
                velho.Fatura_MoraDia = novo.Fatura_MoraDia;
                velho.Fatura_MoraDiaR = novo.Fatura_MoraDiaR;
                velho.Fatura_multa = novo.Fatura_multa;
                velho.Fatura_numero = novo.Fatura_numero;
                velho.Fatura_Obs_Geral = novo.Fatura_Obs_Geral;
                velho.Fatura_Pagamento = novo.Fatura_Pagamento;
                velho.Fatura_Vencimento = novo.Fatura_Vencimento;
                velho.Fatura_VlrTotPagar = novo.Fatura_VlrTotPagar;
                velho.Fatura_VlrTotServ = novo.Fatura_VlrTotServ;
                velho.Moeda_id = novo.Moeda_id;
                velho.Supplier_id = novo.Supplier_id;
                velho.TipoFatura_id = novo.TipoFatura_id;
                velho.ObsGeral = novo.ObsGeral;
                velho.Fatura_Status = velho.Fatura_Status;
                
                Con.SaveChanges();
            }
            catch
            {
                throw;
            }

        }

        public void CancelarFatura(FaturaSupplier novo)
        {

            try
            {
                FaturaSupplier velho = PesquisarUmPorSupplier(novo.Fatura_numero, Convert.ToInt32(novo.Supplier_id));
                if (velho != null)
                {
                    velho.CentroCusto_id = novo.CentroCusto_id;
                    velho.ClassificacaoContabil_id = novo.ClassificacaoContabil_id;
                    velho.Fatura_Cambio = novo.Fatura_Cambio;
                    velho.Fatura_Comissoes = novo.Fatura_Comissoes;
                    velho.Fatura_Comissoes_Obs = novo.Fatura_Comissoes_Obs;
                    velho.Fatura_Deposito = novo.Fatura_Deposito;
                    velho.Fatura_Deposito_Obs = novo.Fatura_Deposito_Obs;
                    velho.Fatura_Descontos = novo.Fatura_Descontos;
                    velho.Fatura_Descontos_Obs = novo.Fatura_Descontos_Obs;
                    velho.Fatura_Despesas = novo.Fatura_Despesas;
                    velho.Fatura_Despesas_Obs = novo.Fatura_Despesas_Obs;
                    velho.Fatura_Emissao = novo.Fatura_Emissao;
                    //velho.Fatura_id = novo.Fatura_id;
                    velho.Fatura_Impostos = novo.Fatura_Impostos;
                    velho.Fatura_Impostos_Obs = novo.Fatura_Impostos_Obs;
                    velho.Fatura_MoraDia = novo.Fatura_MoraDia;
                    velho.Fatura_MoraDiaR = novo.Fatura_MoraDiaR;
                    velho.Fatura_multa = novo.Fatura_multa;
                    velho.Fatura_numero = novo.Fatura_numero;
                    velho.Fatura_Obs_Geral = novo.Fatura_Obs_Geral;
                    velho.Fatura_Pagamento = novo.Fatura_Pagamento;
                    velho.Fatura_Vencimento = novo.Fatura_Vencimento;
                    velho.Fatura_VlrTotPagar = novo.Fatura_VlrTotPagar;
                    velho.Fatura_VlrTotServ = novo.Fatura_VlrTotServ;
                    velho.Moeda_id = novo.Moeda_id;
                    velho.Supplier_id = novo.Supplier_id;
                    velho.TipoFatura_id = novo.TipoFatura_id;
                    velho.ObsGeral = novo.ObsGeral;
                    velho.Fatura_Status = true;

                    Con.SaveChanges();
                }



            }
            catch
            {
                throw;
            }

        }



        public List<FaturaSupplier> PesquisarTodosPorData(DateTime ini, DateTime fim)
        {
            try
            {
                return Con.FaturaSupplier.Where(s => s.Fatura_Vencimento >= ini && s.Fatura_Vencimento <= fim && s.Fatura_Pagamento == null).ToList();
            }
            catch
            {
                throw;
            }

        }



        public List<FaturaSupplier> PesquisarTodosPorGrupo(int grupo)
        {
            try
            {
                return Con.FaturaSupplier.Where(s => s.id_Fatura_Supplier_Pagamento_Grupo == grupo).ToList();
            }
            catch
            {
                throw;
            }

        }



        
    }
}
